/**
 * @author：anlzou
 * @Date：Created in13:30 2021/3/30
 * @Github：https://github.com/anlzou
 * @Description：
 */
package com.anlzou.beanBorn;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * bean的后置处理器
 *
 * 分别在bean的初始化前后对bean对象提供自己的实例化逻辑
 * postProcessAfterInitialization：初始化之后对bean进行增强处理
 * postProcessBeforeInitialization：初始化之前对bean进行增强处理
 *
 */
public class MyBeanPostProcessor implements BeanPostProcessor {

    /**
     * 对初始化之后的Bean进行处理
     *
     * @param bean 即将初始化的bean
     * @param beanname bean的名称
     * @return 返回给用户的那个bean,可以修改bean也可以返回一个新的bean
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanname) throws BeansException {
        Student stu = null;
        System.out.println("对初始化之后的Bean进行处理,将Bean的成员变量的值修改了");
        if("name".equals(beanname) || bean instanceof Student) {
            stu = (Student) bean;
            stu.setName("Jack");
        }
        return stu;
    }


    /**
     * 对初始化之后的Bean进行处理
     *
     * @param bean 即将初始化的bean
     * @param beanname bean的名称
     * @return 返回给用户的那个bean,可以修改bean也可以返回一个新的bean
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanname) throws BeansException {
        System.out.println("对初始化之前的Bean进行处理,此时我的名字"+bean);
        return bean;
    }
}
